/*
 * main.cpp
 *
 *  Created on: Jan 13, 2012
 *      Author: mhl
 */
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>

#define FILE_SOURCE "file.input"
#define FILE_TARGET	"file.output"
#define BUFF_SIZE	90240

void print_st_info(struct stat *info);

int main()
{
	int err;
	int fd1= open(FILE_SOURCE, O_RDONLY);			// zwraca deskryptor
	err = errno;
	if(fd1== -1)
	{
		printf("Error while opening %s", FILE_SOURCE);
		printf("Kod błędu %d\t %s ", err, strerror(err));
		return err;
	}
	int fd2= open(FILE_TARGET, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
	err = errno;
	if(fd2== -1)
	{
		printf("Error while opening %s", FILE_TARGET);
		printf("Kod błędu %d\t %s", err, strerror(err));
		return err;
	}
	char buff[BUFF_SIZE];
	int inread;
	while((inread= read(fd1, buff, BUFF_SIZE)) > 0)
	{
		write(fd2, buff, inread);
	}

	struct stat *stat_input;						// zaalokować pamięć trzeba?
	stat_input= (struct stat*) calloc(1, sizeof stat_input);
	struct stat *stat_output;
	stat_output= (struct stat*) calloc(1, sizeof stat_output);

	err = fstat(fd1,stat_input);
		  fstat(fd2,stat_output);
	/*  struktura stat zawiera pare ciekawych pol
	 * 	st_mode - prawa dostępu
	 * 	st_ino 	- inode skojarzony z tym plikiem
	 * 	st_dev	- urządzenie na ktorym rezyduje plik
	 * 	st_uid	- id uzytkownika posiadajacy ten plik
	 * 	st_atime- czas ostatniej zmiany
	 * 	st_mtime- czas zmiany zawartosci
	 * 	st_nlink- liczba twardych dowiazan do pliku
	 */
	if(err== -1)
	{
		err= errno;
		printf("%d\t%s",err, strerror(err));
	}
	print_st_info(stat_input);
	print_st_info(stat_output);




	return 0;
}

void print_st_info(struct stat *info)
{
	printf("Prawa dostępu\t%o\n", info->st_mode);
	printf("Inode skojarzony\t%d\n", (unsigned int)info->st_ino);
	printf("Urzadzenie na ktorym plik istnieje\t %d\n", (unsigned int)info->st_dev);
}



